<?php

namespace app\job;

use app\admin\model\IdentityInfo;
use app\admin\model\TeacherDetail;
use app\common\controller\Wordcreate;
use think\queue\Job;
use think\Db;
use think\Log;

/**
 * 生成教师Word文档队列任务
 */
class GenerateTeacherWordJob
{
    /**
     * 执行任务
     * @param Job $job 当前的任务对象
     * @param array $data 任务数据
     */
    public function fire(Job $job, $data)
    {
        try {
            Log::info('开始执行生成Word文档队列任务');
            
            // 检查必要参数
            if (!isset($data['user_id']) || !$data['user_id']) {
                Log::error('队列任务缺少user_id参数');
                $job->delete();
                return;
            }

            $userId = $data['user_id'];
            $detailId = isset($data['detail_id']) ? $data['detail_id'] : '';
            
            // 调用Word文档生成类
            $wordCreate = new Wordcreate();
            if($detailId){
                $result = $wordCreate->generate_word_document($userId,$detailId);
            }else{
                $result = $wordCreate->generate_word_document_old($userId);
            }
            
            // 检查生成结果
            if ($result && $result['code'] == 1) {
                Log::info('Word文档生成成功');
                
                // 更新数据库中的word_file字段
                $ossUrl = $result['oss_url'] ?? '';
                if ($ossUrl) {
                    if($detailId){
                        $updateResult = TeacherDetail::where(['id'=>$detailId])->update(['word_file' => $ossUrl]);
                    }else{
                        $updateResult = IdentityInfo::where(['user_id' => $userId, 'identity_type' => '教师'])->update(['word_file' => $ossUrl]);
                    }
                    if ($updateResult !== false) {
                        Log::info("更新word_file成功: user_id={$userId}, oss_url={$ossUrl}");
                    } else {
                        Log::error("更新word_file失败: user_id={$userId}");
                    }
                }
                
                // 任务执行成功，删除任务
                $job->delete();
            } else {
                Log::error('Word文档生成失败');
                
                // 如果任务执行失败，重试
                if ($job->attempts() < 3) {
                    // 60秒后重试
                    $job->release(60);
                } else {
                    // 超过3次重试，删除任务
                    Log::error("Word文档生成任务失败超过3次，放弃: user_id={$userId}");
                    $job->delete();
                }
            }
            
        } catch (\Exception $e) {
            Log::error('执行Word文档生成队列任务异常: ' . $e->getMessage());
            
            // 如果任务执行失败，重试
            if ($job->attempts() < 3) {
                // 60秒后重试
                $job->release(60);
            } else {
                // 超过3次重试，删除任务
                $job->delete();
            }
        }
    }
}

